/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Modelo.DAL;

import Modelo.ComunidadUniversitaria;
import Modelo.EntregadoA;
import Modelo.ObjetoPerdido;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.json.JSONObject;

/**
 *
 * @author Rafael
 */
public class ReporteObjetoPerdido_DAO {

    // Si exisste
    public static boolean existeCI(String CI) {

        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;
        boolean existe = false;

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Estableciendo conexion consistenciaDatosEmpleado! " + se.getMessage());
            return false;
        }

        String query = "SELECT * FROM comunidad_universitaria "
                + "WHERE comunidad_universitaria.ci = '" + CI + "' "
                + "AND comunidad_universitaria.ci != 'V-00000000';";

        System.out.println(query);
        try {
            rs = s.executeQuery(query);
            if (rs.next()) {
                System.out.println("hay resultados");
                existe = true;
            } else {
                System.out.println("no hay resultados");
            }
        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error al consultar existencia de un Personal " + se.getMessage());
            existe = false;

        } finally {
            if (conexion != null) {
                conexion.cerrarConexion();
            }
            return existe;
        }
    }
    /*
    public static boolean consistenciaReceptor(String CI, String profesion,
    String nombre1, String nombre2, String apellido1, String apellido2) {

    ConexionBD conexion = new ConexionBD();
    Statement s = null;
    ResultSet rs = null;

    try {
    s = conexion.session.createStatement();
    } catch (SQLException se) {
    System.out.println("Error Estableciendo conexion consistenciaDatosEmpleado! " + se.getMessage());
    return false;
    }

    String query = "SELECT * FROM comunidad_universitaria, personal_usb, personal_dsi "
    + "WHERE comunidad_universitaria.ci = '" + CI + "' "
    + "AND comunidad_universitaria.profesion ILIKE '" + profesion + "' "
    + "AND comunidad_universitaria.nombre_1 ILIKE '" + nombre1 + "' "
    + "AND comunidad_universitaria.nombre_2 ILIKE '" + nombre2 + "' "
    + "AND comunidad_universitaria.apellido_1 ILIKE '" + apellido1 + "' "
    + "AND comunidad_universitaria.apellido_2 ILIKE '" + apellido2 + "' "
    + "AND comunidad_universitaria.ci = personal_usb.ci "
    + "AND comunidad_universitaria.ci = personal_dsi.ci "
    + "AND comunidad_universitaria.ci != 'V-00000000';";

    System.out.println(query);
    try {
    rs = s.executeQuery(query);
    if (rs.next()) {
    return true;
    } else {
    // Si no se dan resultados es porque hay una inconsistencia
    return false;
    }
    } catch (SQLException se) {
    se.printStackTrace();
    System.out.println("Error al consultar consistenciaDatosEmpleado " + se.getMessage());
    return false;
    } finally {
    if (conexion != null) {
    conexion.cerrarConexion();
    }
    }
    }

    public static boolean consistenciaPersonaEntrega(
    String nombre1, String nombre2, String apellido1, String apellido2) {

    ConexionBD conexion = new ConexionBD();
    Statement s = null;
    ResultSet rs = null;

    try {
    s = conexion.session.createStatement();
    } catch (SQLException se) {
    System.out.println("Error Estableciendo conexion consistenciaDatosEmpleado! " + se.getMessage());
    return false;
    }

    String query = "SELECT * FROM comunidad_universitaria, personal_usb, personal_dsi "
    + "WHERE comunidad_universitaria.nombre_1 ILIKE '" + nombre1 + "' "
    + "AND comunidad_universitaria.nombre_2 ILIKE '" + nombre2 + "' "
    + "AND comunidad_universitaria.apellido_1 ILIKE '" + apellido1 + "' "
    + "AND comunidad_universitaria.apellido_2 ILIKE '" + apellido2 + "' "
    + "AND comunidad_universitaria.ci = personal_usb.ci "
    + "AND comunidad_universitaria.ci = personal_dsi.ci;";

    System.out.println(query);
    try {
    rs = s.executeQuery(query);
    if (rs.next()) {
    return true;
    } else {
    // Si no se dan resultados es porque hay una inconsistencia
    return false;
    }
    } catch (SQLException se) {
    se.printStackTrace();
    System.out.println("Error en consistenciaPersonaEntrega " + se.getMessage());
    return false;
    } finally {
    if (conexion != null) {
    conexion.cerrarConexion();
    }
    }
    }

    public static ComunidadUniversitaria datosPersonaEntregaOP(String CI) {

    ConexionBD conexion = new ConexionBD();
    Statement s = null;
    ResultSet rs = null;

    try {
    s = conexion.session.createStatement();
    } catch (SQLException se) {
    System.out.println("Error Estableciendo conexion consistenciaDatosEmpleado! " + se.getMessage());
    return null;
    }

    String query = "SELECT * FROM comunidad_universitaria, personal_usb, personal_dsi "
    + "WHERE comunidad_universitaria.ci = '" + CI + "' "
    + "AND comunidad_universitaria.ci = personal_usb.ci "
    + "AND comunidad_universitaria.ci = personal_dsi.ci;";

    System.out.println(query);
    try {
    rs = s.executeQuery(query);

    // hay que hacer el while que llena el objeto.
    if (rs.next()) {
    return null;
    } else {
    // Si no se dan resultados es porque hay una inconsistencia
    return null;
    }
    } catch (SQLException se) {
    se.printStackTrace();
    System.out.println("Error en sacando ced persona entrega OP " + se.getMessage());
    return null;
    } finally {
    if (conexion != null) {
    conexion.cerrarConexion();
    }
    }
    }
     */

    public static boolean insertarPersonal(ComunidadUniversitaria CU) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        boolean inserto = true;

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Estableciendo Conexion para Insertar un Personal! " + se.getMessage());
            return false;
        }

        String query = "INSERT INTO comunidad_universitaria "
                + "(ci, nombre_1, nombre_2, apellido_1, apellido_2, telefono, profesion, email) "
                + "VALUES ('" + CU.getCi() + "',"
                + "'" + CU.getNombre1() + "',"
                + "'" + CU.getNombre2() + "',"
                + "'" + CU.getApellido1() + "',"
                + "'" + CU.getApellido2() + "',"
                + "'" + CU.getTelefono() + "',"
                + "'" + CU.getProfesion() + "',"
                + "'" + CU.getEmail() + "');";

        System.out.println(query);

        try {
            s.executeUpdate(query);
        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error al insertar una persona " + se.getMessage());
            inserto = false;
        } finally {
            if (conexion != null) {
                conexion.cerrarConexion();
            }
            return inserto;
        }
    }

    public static boolean insertarEA(EntregadoA EA) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        boolean inserto = true;

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Estableciendo Conexion para Insertar un Personal! " + se.getMessage());
            return false;
        }

        String query = "INSERT INTO entregado_a "
                + "(id_objeto, ciRecibe, ciEntrega, fecha_entrega, observaciones) "
                + "VALUES ('" + EA.getIdObjeto() + "',"
                + "'" + EA.getCiRecibe() + "',"
                + "'" + EA.getCiEntrega() + "',"
                + "'" + EA.getFechaEntrega() + "',"
                + "'" + EA.getObservaciones() + "');";

        System.out.println(query);

        try {
            s.executeUpdate(query);
        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error al insertar una entrega " + se.getMessage());
            inserto = false;
        } finally {
            if (conexion != null) {
                conexion.cerrarConexion();
            }
            return inserto;
        }
    }

    public static boolean personalExiste(String CI) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;
        boolean existe = false;

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Estableciendo conexion Revisar personal! " + se.getMessage());
            return existe;
        }

        String query = "SELECT * FROM comunidad_universitaria, personal_usb "
                + "WHERE comunidad_universitaria.ci = '" + CI + "' AND personal_usb.activo ='si' "
                + "AND comunidad_universitaria.ci = personal_usb.ci;";

        System.out.println(query);
        try {
            rs = s.executeQuery(query);
            if (rs.next()) {
                existe = true;
            }
        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error al consultar existencia de un Personal");
            existe = false;
        } finally {
            if (conexion != null) {
                conexion.cerrarConexion();
            }
            return existe;
        }
    }

    public static JSONObject consultarEOP(String where, String tipo, String Desde, String Hasta) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;
        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Consultando EOP!" + se.getMessage());
            return null;
        }

        /// PENDIENTE AQUI

        String query = "SELECT *, (Select count(*) FROM entregado_a, comunidad_universitaria, objeto_perdido"
                + " WHERE entregado_a.ciRecibe = comunidad_universitaria.ci AND"
                + " objeto_perdido.id_objeto = entregado_a.id_objeto"
                + " AND entregado_a.fecha_entrega BETWEEN "
                + " to_date('" + Desde + "','dd/mm/yyyy')" + " AND "
                + " to_date('" + Hasta + "','dd/mm/yyyy'))"
                + " FROM entregado_a, comunidad_universitaria, objeto_perdido"
                + " WHERE entregado_a.ciRecibe = comunidad_universitaria.ci AND"
                + " objeto_perdido.id_objeto = entregado_a.id_objeto"
                + " AND entregado_a.fecha_entrega BETWEEN "
                + " to_date('" + Desde + "','dd/mm/yyyy')" + " AND "
                + " to_date('" + Hasta + "','dd/mm/yyyy')" + " "
                + where + ";";

        System.out.println(query);

        try {
            rs = s.executeQuery(query);

            JSONObject Personas = new JSONObject();
            try {
                int i = 0;
                while (rs.next()) {
                    JSONObject persona = new JSONObject();
                    String Fecha = rs.getString(4);
                    // hay que estar pendiente con lo que sale de rs
                    persona.put("id", rs.getString(1));
                    persona.put("FechaEntrega", Fecha.substring(5, 7) + "/"
                            + Fecha.substring(8, 10) + "/"
                            + Fecha.substring(0, 4));
                    persona.put("nombreR", rs.getString(7));
                    persona.put("apellidoR", rs.getString(9));
                    persona.put("tipoObj", rs.getString(15));
                    persona.put("tam", rs.getString(19));
                    Personas.put("" + i++, persona);
                }
                if (i == 0) {
                    System.out.println("Retorno vacio");
                    return null;
                }
            } catch (Exception e) {
                e.printStackTrace();
                System.out.println("Error listando el Entregas OP!!");
            }
            System.out.println("Retorno Entregas");
            return Personas;
        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error listando el Entregas OP!!");
            return null;
        }
    }

    public static boolean marcarEntregadoOP(Long id) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;
        boolean retorno = false;

        String query = "Update objeto_perdido "
                + "SET status = 'Entregado' "
                + "WHERE id_objeto = " + id + ";";

        System.out.println(query);

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error cambiando status" + se.getMessage());
            return false;
        }
        try {
            int i = s.executeUpdate(query);

            if (i > 0) {
                retorno = true;
            }
        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error cambiando status" + se.getMessage());
        } finally {
            if (conexion != null) {
                conexion.cerrarConexion();
            }
            return retorno;
        }
    }

    public static boolean modificaEA(EntregadoA EA) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        boolean inserto = true;

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Estableciendo Conexion para Insertar un Personal! " + se.getMessage());
            return false;
        }

        String query = "UPDATE entregado_a"
                + " SET ciRecibe = '" + EA.getCiRecibe() + "',"
                + " ciEntrega = '" + EA.getCiEntrega() + "',"
                + " observaciones = '" + EA.getObservaciones() + "'"
                + " WHERE id_objeto = " + EA.getIdObjeto() + ";";

        System.out.println(query);

        try {
            s.executeUpdate(query);
        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error al modif una entrega " + se.getMessage());
            inserto = false;
        } finally {
            if (conexion != null) {
                conexion.cerrarConexion();
            }
            return inserto;
        }
    }

    public static ObjetoPerdido obtenerOP(Long id) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;
        ObjetoPerdido obj = new ObjetoPerdido();

        String query = "SELECT * FROM objeto_perdido "
                + "WHERE id_objeto = " + id + ";";

        System.out.println(query);

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error cambiando status" + se.getMessage());
            return null;
        }
        try {

            rs = s.executeQuery(query);



            while (rs.next()) {
                obj.setDescripcion(rs.getString(5));
                String Fecha = rs.getString(4);
                // trampa
                obj.setStatus(Fecha.substring(5, 7) + "/"
                        + Fecha.substring(8, 10) + "/"
                        + Fecha.substring(0, 4));
                obj.setIdTipoObjeto(rs.getString(2));
            }

        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error cambiando status" + se.getMessage());
        } finally {
            if (conexion != null) {
                conexion.cerrarConexion();
            }
            return obj;
        }
    }

    public static ComunidadUniversitaria obteneDatCU(String ci) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;
        ComunidadUniversitaria cu = new ComunidadUniversitaria();

        String query = "SELECT * FROM comunidad_universitaria "
                + "WHERE ci = '" + ci + "';";

        System.out.println(query);

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error cambiando status" + se.getMessage());
            return null;
        }
        try {

            rs = s.executeQuery(query);



            while (rs.next()) {
                cu.setNombre1(rs.getString(2));
                cu.setNombre2(rs.getString(3));
                cu.setApellido1(rs.getString(4));
                cu.setApellido2(rs.getString(5));
                cu.setEmail(rs.getString(7));
                cu.setProfesion(rs.getString(8));
                if (rs.getString(2).length() > 1) {
                    cu.setTelefono(Integer.parseInt(rs.getString(6)));
                } else {
                    cu.setTelefono(0);
                }
            }

        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error cambiando status" + se.getMessage());
        } finally {
            if (conexion != null) {
                conexion.cerrarConexion();
            }
            return cu;
        }
    }

    public static EntregadoA obtenerEA(Long id) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;
        EntregadoA EA = new EntregadoA();

        String query = "SELECT * FROM entregado_a "
                + "WHERE id_objeto = " + id + ";";

        System.out.println(query);

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error cambiando status" + se.getMessage());
            return null;
        }
        try {

            rs = s.executeQuery(query);

            while (rs.next()) {
                EA.setCiEntrega(rs.getString(3));
                EA.setCiRecibe(rs.getString(2));
                EA.setObservaciones(rs.getString(5));
            }

        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error cambiando status" + se.getMessage());
        } finally {
            if (conexion != null) {
                conexion.cerrarConexion();
            }
            return EA;
        }
    }

    public static String findUSBID(Long id) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;
        EntregadoA EA = new EntregadoA();
        String usbid = "N/A";

        String query = "SELECT personal_usb.usbid FROM entregado_a, personal_usb "
                + "WHERE entregado_a.id_objeto = " + id + " AND "
                + "entregado_a.ciRecibe = personal_usb.ci;";

        System.out.println(query);

        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error cambiando status" + se.getMessage());
            return null;
        }
        try {

            rs = s.executeQuery(query);

            while (rs.next()) {
                usbid = rs.getString(1);
            }

        } catch (SQLException se) {
            se.printStackTrace();
            System.out.println("Error cambiando status" + se.getMessage());
        } finally {
            if (conexion != null) {
                conexion.cerrarConexion();
            }
            return usbid;
        }
    }
}
